package com.example.dormitory_system.controller;

import com.example.dormitory_system.aspect.CheckTwoSysUserRole;
import com.example.dormitory_system.domain.R;
import com.example.dormitory_system.domain.TableDataInfo;
import com.example.dormitory_system.domain.dto.tsysuser.*;
import com.example.dormitory_system.domain.enetiy.LateReturn;
import com.example.dormitory_system.domain.vo.tsysuser.UserInfoVO;
import com.example.dormitory_system.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/sys2")
@CheckTwoSysUserRole
public class TwoSystemUserController extends BaseController {
    @Autowired
    private MaintenanceService maintenanceService;
    @Autowired
    private LateReturnService lateReturnService;
    @Autowired
    private VisitorService visitorService;
    @Autowired
    private AnnouncementService announcementService;
    @Autowired
    private UserService userService;

    @GetMapping("/user/info")
    public R<UserInfoVO> sysUserInfo(Long userId) {
        return R.ok(userService.sysUserInfo(userId));
    }

    @PutMapping("/user/info/update")
    public R<Void> sysUserInfoUpdate(@RequestBody UserInfoUpdateDTO userInfoUpdateDTO) {
            return toR(userService.sysUserInfoUpdate(userInfoUpdateDTO));
    }

    /**
     * 获取管理员列表 根据用户名和名字进行模糊查询
     * @param listDTO
     * @return
     */
    @GetMapping("/user/list")
    public TableDataInfo sysListUser(ListDTO listDTO) {
        return getDataTable(userService.sysListUser(listDTO));
    }

    /**
     *维修列表
     * @param status  0:进行中 1:已处理  查询条件 查询未处理/已处理
     * @param pageNum
     * @param pageSize
     * @return
     */
    @GetMapping("/maintain/list")
    public TableDataInfo sysListMaintain(Integer status,@RequestParam (defaultValue = "1") Integer pageNum,@RequestParam (defaultValue = "10") Integer pageSize) {
        return getDataTable(maintenanceService.sysListMaintain(status,pageNum,pageSize));
    }

    /**
     * 修改维修状态
     * @param status  传1 表示把未处理修改成已处理
     * @return
     */
    @PutMapping("/maintain/update")
    public R<Void> updateMaintain(Long maintenanceId, Integer status) {
        return toR(maintenanceService.updateMaintain(maintenanceId,status));
    }

    /**
     * 二级管理员查看自己写的晚归列表
     * @param pageNum
     * @param pageSize
     * @return
     */
    @GetMapping("/LateReturn/list")
    public TableDataInfo sysListLateReturn(String name,@RequestParam (defaultValue = "1") Integer pageNum,@RequestParam (defaultValue = "10") Integer pageSize) {  //未分页
        return getDataTable(lateReturnService.sysListLateReturn(name,pageNum,pageSize));
    }

    /**
     * 二级管理员添加晚归
     * @param lateReturnAddDTO
     * @return
     */
    @PostMapping("/LateReturn/add")
    public R<Void> addLateReturn(@RequestBody LateReturnAddDTO lateReturnAddDTO) {
        return toR(lateReturnService.addLateReturn(lateReturnAddDTO));
    }


    /**
     * 二级管理员查看自己写的访客列表
     * @param pageNum
     * @param pageSize
     * @return
     */
    @GetMapping("/visitor/list")
    public TableDataInfo sysListVisitor(Long userId,String visitorName, @RequestParam (defaultValue = "1") Integer pageNum,@RequestParam (defaultValue = "10") Integer pageSize) {    //未分页
        return getDataTable(visitorService.sysListVisitor(userId,visitorName,pageNum,pageSize));
    }

    /**
     * 二级管理员添加访客
     * @param visitorAddDTO
     * @return
     */
    @PostMapping("/visitor/add")
    public R<Void> addVisitor(@RequestBody VisitorAddDTO visitorAddDTO) {
        return toR(visitorService.addVisitor(visitorAddDTO));
    }


    /**
     * 公告列表
     * @param userId 传自己的 表示查看自己写的  传null表示查看全部的
     * @param status 传啥表示要看啥状态的列表 0:未发布 1:已发布 2:已删除
     * @param title 传啥表示要模糊查询公告标题
     * @param pageNum
     * @param pageSize
     * @return
     */
    @GetMapping("/announcement/list")
    public TableDataInfo sysListAnnouncement(Long userId,String title,Integer status,@RequestParam (defaultValue = "1") Integer pageNum,@RequestParam (defaultValue = "10") Integer pageSize) {    //未分页
        return getDataTable(announcementService.sysListAnnouncement(userId,title,status,pageNum,pageSize));
    }

    /**
     * 二级管理员添加公告
     * @param announcementAddDTO
     * @return
     */
    @PostMapping("/announcement/add")
    public R<Void> addAnnouncement(@RequestBody AnnouncementAddDTO announcementAddDTO) {
        return toR(announcementService.addAnnouncement(announcementAddDTO));
    }

    /**
     * 修改公告状态
     * @param announcementId 表id
     * @param status 要求修改后的状态 0:未发布 1:已发布 2:已删除
     * @param userId 修改人id 不能为null
     * @return
     */
    @PutMapping("/announcement/update")
    public R<Void> updateAnnouncement(String title,String content, Long announcementId,@RequestParam(defaultValue = "0") Integer status,Long userId) {
        return toR(announcementService.updateAnnouncement(announcementId,status,userId,title,content));
    }

    /**
     * 重置密码
     * @param resetPasswordDTO
     * @return
     */
    @PostMapping("/resetPassword")
    public R<Boolean> resetPassword(@RequestBody ResetPasswordDTO resetPasswordDTO){
        return R.ok(userService.resetpassoword(resetPasswordDTO.getUserId(),resetPasswordDTO.getOldPassword(),resetPasswordDTO.getNewPassword()));
    }


}
